package com.ynet.eq.haiqing.module.datatran.req;

import com.alibaba.fastjson.annotation.JSONField;
import com.ynet.eq.haiqing.common.valid.ListValue;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 * @author 胡超雄
 * @date 2021/7/6 17:18
 * @desc  添加或者修改人员的基础 bean
 */
@Data
public class AddOrUpdateUserBase {
    /**
     * 平台生成的 id,唯一标识不同人员，
     * 建议使用身份证号，传入 customId
     * 设备已经存在视为修改，否则为增
     * 加
     */

    @NotEmpty(message = "id不能为空")
    @Size(max = 48, message = "无效id,不能超过48位")
    private String customId;

    /**
     * 人员名字
     */
    @NotEmpty(message = "人员名字不能为空")
    @Size(max = 32, message = "人员不能超过32位")
    private String name;

    /**
     * 人员类型 0: 白名单 1: 黑名单
     */
    @NotNull(message = "人员类型不能为空")
    @ListValue(values = {0, 1},message = "人员类型参数不正确")
    private Integer personType;

    /**
     *  名单类型
     * 0:永久名单
     * 1:临时名单 1(时间段有效)
     * 2:临时名单 2(每天同一时间段有效)
     * 3 临时名单 3(次数有效)
     */
    @NotNull(message = "名单类型不能为空")
    @ListValue(values = {0, 1,2,3},message = "名单类型参数不正确")
    private Integer tempCardType;

    /**
     * 临时名单开始时间  (2020-04-18 00:00:00)
     * 名单类型为临时名单 1 或 2 时必填
     */
    private String  cardValidBegin ;

    /**
     * 临时名单结束时间  (2020-04-18 00:00:00)
     * 名单类型为临时名单 1 或 2 时必填
     */
    private String  cardValidEnd ;

    /**
     * 名临时名单 3 的有效次数
     * 名单类型为临时名单 3 时必填
     */
    @JSONField(name = "EffectNumber")
    private  Integer  effectNumber;

    /**
     * 民族  1~57  TODO   名族
     * 1：汉族
     * 详见附录 A A.1 民族
     */
    private Integer  nation;

    /**
     * 性别 0: 男 1: 女
     */
    @ListValue(values = {0, 1},message = "性别参数不正确")
    private  Integer gender;

    /**
     * 证件号码，长度 32 字符（包含结束
     * 符）
     */
    private  String  idCard;


    /**
     * 电话号码，长度 32 字符（包含结束
     * 符）
     */
    @Size(max = 32, message = "电话号码 不能超过32位")
    private  String  telnum1;


    /**
     * 籍贯，长度 32 字符（包含结束符）
     */
    @JSONField(name = "native")
    @Size(max = 32, message = "籍贯 不能超过32位")
    private String  nativeStr;

    /**
     * 生日 birthday生日
     * 1992-06-15
     */
    private  String  birthday;




    /**
     * 住址，长度 72 字符（包含结束符）
     */
    @Size(max = 72, message = "住址 不能超过72位")
    private  String  address;

    /**
     * 备注（特殊版本复用为多时间段策
     * 略组 ID 1~255）
     */
    private  String  notes;

    /**
     * 韦根卡号生成方式
     * 0: 公用卡号
     * 1: 自动生成
     * 2: 手动输入
     * 3: 不使用门禁
     */
    @ListValue(values = {0, 1,2,3},message = "韦根卡号生成方式 参数不正确")
    private Integer  cardType2;

    /**
     * 组成韦根卡号根据的韦根协议;当
     * cardType2=2 必填；
     * 0: 26 位
     * 1: 34 位
     * 6:26 位(8+16 facility
     * code+userid(设备代码+卡号)分开填
     * 写);
     * 7:34 位(8+24 facility
     * code+userid(设备代码+卡号)分开填
     * 写)
     * 默认:1(34 位)
     */
    @JSONField(name = "WiegandType")
    @ListValue(values = {0, 1,6,7},message = "组成韦根卡号根据的韦根协议 参数不正确")
    private  Integer  wiegandType;

    /**
     * 设备代码(Facility code);当
     * WiegandType= 6 or 7 时必填;
     * 和 cardNum2 一起使用。当
     * WiegandType=0 or 1 时,不必填
     * 写。
     * cardNum2 int
     * (optional)
     * 韦
     */
    @JSONField(name = "WGFacilityCode")
    private  Integer  wGFacilityCode;

    /**
     * 韦根门禁卡号(userid)
     * cardType2 为 2 时必填
     */
    private Integer  cardNum2 ;

    /**
     *组成门禁卡号采用模式
     * 0: 十进制构成卡号
     * 1: 十六进制构成卡号
     * 默认 0: 十进制构成卡号
     */
    @JSONField(name = "CardMode")
    @ListValue(values = {0, 1},message = "组成门禁卡号采用模式 参数不正确")
    private  Integer  cardMode;

    /**
     * 组成 RF（ID）卡号采用模式，
     * 针对内置刷卡机型
     * 0: 十进制构成卡号
     * 1: 十六进制构成卡号
     * 默认 1: 十六进制构成卡号
     */
    @JSONField(name = "RFCardMode")
    @ListValue(values = {0, 1},message = "组成 RF（ID）卡号采用模式 参数不正确")
    private  Integer   rfCardMode;

    /**
     * ID 卡卡号，最大长度为 10 个字符
     * 长度,针对内置刷卡机型（含结束
     * 符），如果只是重新编辑名单，不
     * 改变卡号，则不需要传入 RFIDCard
     * 关键字
     *
     * 如果 RFCardMode=0，
     * 填 入 十 进 制 字 符 串
     * (“1369406761”)；如
     * 果 RFCardMode=1，填
     * 入 十 六 进 制 字 符 串
     * (“519F7D29”)
     */
    @JSONField(name = "RFIDCard")
    private  String   rfIDCard;

    /**
     *  证件类型：0 身份证
     */
    @ListValue(values = {0},message = "证件类型 参数不正确")
    private  Integer  cardType;

    /**
     * 增加名单时 picURI 和
     * pic 两选一，修改名单不
     * 替换图片时非必须
     */
    private  String picURI ;



}
